/**********************************************
 * 姓名：fanfutian
 * 时间：2023/11/9                             
 * 文件名：机房预约系统.cpp  
 * 功能： 与用户进行交互
 *********************************************/
#include <iostream>
#include <string>
#include <fstream>
#include "identity.h"
#include "globalFile.h"
#include "student.h"
#include "teacher.h"
#include "manager.h"

using namespace std;



/*
 * 创建登陆功能
 *      filename：操作的文件名
 *      type：操作者身份
 */
void loginIn(string fileName,int type){
    // 创建父类指针---用于指向子类对象
    Identity *person = nullptr;
    // 读文件
    ifstream ifs;
    ifs.open(fileName,ios::in);
    // 判断文件是否存在
    if(!ifs.is_open() && type != 3){
        cout << "文件不存在！"<< endl;
        ifs.close();
        return;
    }
    // 文件存在--接收文件信息
    int id,f_id;
    string name,pwd,f_name,f_pwd;
    // 判断身份
    if(type == 1){
        cout << "请输入你的学号：";
        cin >> id;
        cout << "请输入姓名：";
        cin >> name;
        cout << "请输入密码：";
        cin >> pwd;
        // 判断文件中是否存在账号（验证是否登陆成功）
        while(ifs >> f_id && ifs >> f_name && ifs >> f_pwd){
            if(f_id == id && f_name == name && f_pwd == pwd){
                cout << "登陆成功！"<< endl;
                // 父类的引用指向子类的对象
                person = new Student(id,name,pwd);
                // 调用子类的菜单
                person->showMenu();
                return;
            }
        }
    }else if(type == 2){
        cout << "请输入编号：";
        cin >> id;
        cout << "请输入姓名：";
        cin >> name;
        cout << "请输入密码：";
        cin >> pwd;
        // 判断文件中是否存在账号（验证是否登陆成功）
        while(ifs >> f_id && ifs >> f_name && ifs >> f_pwd){
            if(f_id == id && f_name == name && f_pwd == pwd){
                cout << "登陆成功！" << endl;
                // 父类的引用指向子类的对象
                person = new Teacher(id,name,pwd);
                // 调用子类的菜单
                person->showMenu();
                return;
            }
        }
    }else if(type == 3){
        cout << "请输入姓名：";
        cin >> name;
        cout << "请输入密码：";
        cin >> pwd;
        // 判断文件中是否存在账号（验证是否登陆成功）
        string initName = "admin";
        string initPwd = "1234";
        if(initName == name && initPwd == pwd){
            cout << "登陆成功！" << endl;
            // 父类的引用指向子类的对象
            person = new Manager(name,pwd);
            // 调用子类的菜单
            person->showMenu();
            return;
        }
    }
    cout << "登陆失败！密码账户错误或无账户信息，请联系管理员创建账户" << endl;
}


/*
 * 退出系统
 */
void exitSystem(){
    cout << "欢迎下次使用！" << endl;
    exit(0);
}


/*
 * 创建菜单
 */
void showMenu(){
    while(true){
        cout << "*********** 欢迎进入机房预约系统 ***********" << endl;
        cout << "\t\t\t1、学生代表" << endl;
        cout << "\t\t\t2、老   师" << endl;
        cout << "\t\t\t3、管 理 员" << endl;
        cout << "\t\t\t4、退   出" << endl;
        cout << "请选择：";
        int select = 0;
        cin >> select;
        switch (select) {
            case 1:
                loginIn(STUDENT_FILE,1);
                break;
            case 2:
                loginIn(TEACHER_FILE,2);
                break;
            case 3:
                loginIn(MANAGER_FILE,3);
                break;
            case 4:
                exitSystem();
                break;
            default:
                cout << "输入有误！" << endl;
                break;
        }
    }
}

int main() {

//    string userName = "hhhyti";
//    string password = "123huhe";
//
//    cout << "输入账户：";
//    string name;
//    cin >> name;
//
//    cout << "输入密码：";
//    string pwd;
//    cin >> pwd;
//
//    if(userName == name || password == pwd){
//        cout << "验证成功！" << endl;
//    }else{
//        cout << "验证失败！" << endl;
//    }
//
//    return 0;

    // 调用菜单
    showMenu();
    return 0;
}